home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / Gfx / Edit / TSMorph / src / Prefs.c < prev    next >
C/C++ Source or Header  |  1994-10-30  |  18KB  |  545 lines

  1. // TSMorph - Amiga Morphing program
  2. // Copyright (C) © 1993  Topicsave Limited
  3.  
  4. // This program is free software; you can redistribute it and/or modify
  5. // it under the terms of the GNU General Public License as published by
  6. // the Free Software Foundation; either version 2 of the License, or
  7. // any later version.
  8.  
  9. // This program is distributed in the hope that it will be useful,
  10. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. // GNU General Public License for more details.
  13.  
  14. // You should have received a copy of the GNU General Public License
  15. // along with this program; if not, write to the Free Software
  16. // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17.  
  18. // mpaddock@cix.compulink.co.uk
  19.  
  20. /*
  21.  *  Source machine generated by GadToolsBox V2.0
  22.  *  which is (c) Copyright 1991-1993 Jaba Development
  23.  *
  24.  *  GUI Designed by : M J P
  25.  */
  26.  
  27. // This has been edited!!
  28.  
  29. #include <exec/types.h>
  30. #include <intuition/intuition.h>
  31. #include <intuition/classes.h>
  32. #include <intuition/classusr.h>
  33. #include <intuition/imageclass.h>
  34. #include <intuition/gadgetclass.h>
  35. #include <libraries/gadtools.h>
  36. #include <graphics/displayinfo.h>
  37. #include <graphics/gfxbase.h>
  38. #include <clib/exec_protos.h>
  39. #include <clib/intuition_protos.h>
  40. #include <clib/gadtools_protos.h>
  41. #include <clib/graphics_protos.h>
  42. #include <clib/utility_protos.h>
  43. #include <string.h>
  44. //#include <pragmas/exec_pragmas.h>
  45. //#include <pragmas/intuition_pragmas.h>
  46. //#include <pragmas/gadtools_pragmas.h>
  47. //#include <pragmas/graphics_pragmas.h>
  48. //#include <pragmas/utility_pragmas.h>
  49.  
  50. #include <proto/exec.h>
  51. #include <proto/gadtools.h>
  52. #include <proto/intuition.h>
  53. #include <proto/diskfont.h>
  54. #include <proto/graphics.h>
  55. #include <proto/utility.h>
  56.  
  57. // V37 stuff
  58. #ifndef WA_NewLookMenus
  59. #define WA_NewLookMenus (WA_Dummy + 0x30)
  60. #endif
  61. #ifndef GTMN_NewLookMenus
  62. #define GTMN_NewLookMenus GT_TagBase+67
  63. #endif
  64. #ifndef STRINGA_ExitHelp
  65. #define STRINGA_ExitHelp (STRINGA_Dummy + 0x0013)
  66. #endif
  67. #ifndef WA_MenuHelp
  68. #define WA_MenuHelp (WA_Dummy + 0x2F)
  69. #endif    
  70.  
  71. #include "Prefs.h"
  72.  
  73. #define max(a,b) (((a)>(b))?(a):(b))
  74.  
  75. struct Screen         *Scr = NULL;
  76. UBYTE                 *PubScreenName = NULL;
  77. APTR                   VisualInfo = NULL;
  78. struct Window         *TSMorphPrefsWnd = NULL;
  79. struct Gadget         *TSMorphPrefsGList = NULL;
  80. struct Menu           *TSMorphPrefsMenus = NULL;
  81. struct IntuiMessage    TSMorphPrefsMsg;
  82. UWORD                  TSMorphPrefsZoom[4];
  83. struct Gadget         *TSMorphPrefsGadgets[27];
  84. UWORD                  TSMorphPrefsLeft = 0;
  85. UWORD                  TSMorphPrefsTop = 13;
  86. UWORD                  TSMorphPrefsWidth = 632;
  87. UWORD                  TSMorphPrefsHeight = 178;
  88. UBYTE                 *TSMorphPrefsWdt = (UBYTE *)"TSMorph Preferences";
  89. struct TextAttr       *Font, Attr;
  90. UWORD                  FontX, FontY;
  91. UWORD                  OffX, OffY;
  92. // gadget sizes
  93. struct Rectangle          Rect[27];
  94.  
  95. UBYTE *Mode0Labels[] = {
  96.     (UBYTE *)"Quick (0)",
  97.     (UBYTE *)"Quick Stationery (1)",
  98.     (UBYTE *)"Closest (2)",
  99.     (UBYTE *)"Closest Stationery (3)",
  100.     (UBYTE *)"Search Quick (4)",
  101.     (UBYTE *)"Search Quick Stat (5)",
  102.     (UBYTE *)"Search Close (6)",
  103.     (UBYTE *)"Search Close Stat (7)",
  104.     (UBYTE *)"Delaunay Quick (8)",
  105.     (UBYTE *)"Delaunay Quick Stat (9)",
  106.     (UBYTE *)"Delaunay Closest (10)",
  107.     (UBYTE *)"Delaunay Close Stat (11)",
  108.     (UBYTE *)"Del Search Quick (12)",
  109.     (UBYTE *)"Del Search Quick Stat (13)",
  110.     (UBYTE *)"Del Search Close (14)",
  111.     (UBYTE *)"Del Search Close Stat (15)",
  112.     (UBYTE *)"Pre Quick (16)",
  113.     (UBYTE *)"Pre Quick Stationery (17)",
  114.     (UBYTE *)"Pre Closest (18)",
  115.     (UBYTE *)"Pre Closest Stationery (19)",
  116.     (UBYTE *)"Pre Search Quick (20)",
  117.     (UBYTE *)"Pre Search Quick Stat (21)",
  118.     (UBYTE *)"Pre Search Close (22)",
  119.     (UBYTE *)"Pre Search Close Stat (23)",
  120.     (UBYTE *)"Pre Delaunay Quick (24)",
  121.     (UBYTE *)"Pre Del Quick Stat (25)",
  122.     (UBYTE *)"Pre Del Closest (26)",
  123.     (UBYTE *)"Pre Del Close Stat (27)",
  124.     (UBYTE *)"Pre Del Search Quick (28)",
  125.     (UBYTE *)"Pre Del Srch Qck Stat (29)",
  126.     (UBYTE *)"Pre Del Srch Cls (30)",
  127.     (UBYTE *)"Pre Del Srch Cls Stat (31)",
  128.     NULL };
  129.  
  130. UBYTE *SaveFormat0Labels[] = {
  131.     (UBYTE *)"ILBM24",
  132.     (UBYTE *)"OPAL24",
  133.     (UBYTE *)"OPAL24T",
  134.     (UBYTE *)"OPAL24F",
  135.     (UBYTE *)"OPAL24FT",
  136.     (UBYTE *)"JPEG",
  137.     (UBYTE *)"JPEGT",
  138.     (UBYTE *)"PPM",
  139.     (UBYTE *)"BW16",
  140.     (UBYTE *)"BW256",
  141.     (UBYTE *)"HAM6",
  142.     (UBYTE *)"HAM8",
  143.     (UBYTE *)"DCTV3",
  144.     (UBYTE *)"DCTV4",
  145.     NULL };
  146.  
  147. UBYTE *Zoom0Labels[] = {
  148.     (UBYTE *)"YES",
  149.     (UBYTE *)"NO",
  150.     (UBYTE *)"OFF",
  151.     NULL };
  152.  
  153. UBYTE *Palette0Labels[] = {
  154.     (UBYTE *)"YES",
  155.     (UBYTE *)"NO",
  156.     (UBYTE *)"OFF",
  157.     NULL };
  158.  
  159. UBYTE *OpenMode0Labels[] = {
  160.     (UBYTE *)"ALWAYS",
  161.     (UBYTE *)"IFILBM",
  162.     (UBYTE *)"IFCOLOURS",
  163.     (UBYTE *)"REMAP",
  164.     (UBYTE *)"OPAL",
  165.     NULL };
  166.  
  167. struct IntuiText TSMorphPrefsIText[] = {
  168.     1, 0, JAM1,332, 10, NULL, (UBYTE *)"Render", NULL,
  169.     1, 0, JAM1,553, 10, NULL, (UBYTE *)"TSMorph", NULL,
  170.     1, 0, JAM1,180, 88, NULL, (UBYTE *)"ARexx Script", NULL,
  171.     1, 0, JAM1,486, 88, NULL, (UBYTE *)"Public Screen", NULL,
  172.     1, 0, JAM1,480, 136, NULL, (UBYTE *)"Icon", NULL };
  173.  
  174. #define TSMorphPrefs_TNUM 5
  175.  
  176. struct NewMenu TSMorphPrefsNewMenu[] = {
  177.     NM_TITLE, (STRPTR)"Project", NULL, 0, NULL, NULL,
  178.     NM_ITEM, (STRPTR)"Open...", (STRPTR)"O", 0, 0L, (APTR)TSMorphPrefsOpen,
  179.     NM_ITEM, (STRPTR)"Save As...", (STRPTR)"A", 0, 0L, (APTR)TSMorphPrefsSaveAs,
  180.     NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
  181.     NM_ITEM, (STRPTR)"Quit", (STRPTR)"Q", 0, 0L, (APTR)TSMorphPrefsQuit,
  182.     NM_TITLE, (STRPTR)"Edit", NULL, 0, NULL, NULL,
  183.     NM_ITEM, (STRPTR)"Reset To Defaults", (STRPTR)"D", 0, 0L, (APTR)TSMorphPrefsResetToDefaults,
  184.     NM_ITEM, (STRPTR)"Last Saved", (STRPTR)"L", 0, 0L, (APTR)TSMorphPrefsLastSaved,
  185.     NM_ITEM, (STRPTR)"Restore", (STRPTR)"R", 0, 0L, (APTR)TSMorphPrefsRestore,
  186.     NM_TITLE, (STRPTR)"Settings", NULL, 0, NULL, NULL,
  187.     NM_ITEM, (STRPTR)"Create Icons?", (STRPTR)"I", CHECKIT|MENUTOGGLE|CHECKED, 0L, (APTR)TSMorphPrefsCreateIcons,
  188.     NM_END, NULL, NULL, 0, 0L, NULL };
  189.  
  190. UWORD TSMorphPrefsGTypes[] = {
  191.     SLIDER_KIND,
  192.     SLIDER_KIND,
  193.     SLIDER_KIND,
  194.     CYCLE_KIND,
  195.     CYCLE_KIND,
  196.     SLIDER_KIND,
  197.     CHECKBOX_KIND,
  198.     SLIDER_KIND,
  199.     CYCLE_KIND,
  200.     CYCLE_KIND,
  201.     CYCLE_KIND,
  202.     CHECKBOX_KIND,
  203.     CHECKBOX_KIND,
  204.     CHECKBOX_KIND,
  205.     CHECKBOX_KIND,
  206.     CHECKBOX_KIND,
  207.     BUTTON_KIND,
  208.     BUTTON_KIND,
  209.     BUTTON_KIND,
  210.     LISTVIEW_KIND,
  211.     STRING_KIND,
  212.     STRING_KIND,
  213.     STRING_KIND,
  214.     STRING_KIND,
  215.     STRING_KIND,
  216.     STRING_KIND,
  217.     CHECKBOX_KIND
  218. };
  219.  
  220. struct NewGadget TSMorphPrefsNGad[] = {
  221.     59, 60, 143, 11, (UBYTE *)"Depth", NULL, GD_CustomDepth, PLACETEXT_LEFT, NULL, (APTR)CustomDepthClicked,
  222.     257, 15, 53, 11, (UBYTE *)"DX", NULL, GD_DX, PLACETEXT_LEFT, NULL, (APTR)DXClicked,
  223.     366, 15, 53, 11, (UBYTE *)"DY", NULL, GD_DY, PLACETEXT_LEFT, NULL, (APTR)DYClicked,
  224.     233, 30, 209, 11, NULL, NULL, GD_Mode, 0, NULL, (APTR)ModeClicked,
  225.     233, 45, 111, 11, NULL, NULL, GD_SaveFormat, 0, NULL, (APTR)SaveFormatClicked,
  226.     350, 45, 61, 11, NULL, NULL, GD_Quality, 0, NULL, (APTR)QualityClicked,
  227.     257, 60, 26, 11, (UBYTE *)"AA", NULL, GD_AntiAlias, PLACETEXT_LEFT, NULL, (APTR)AntiAliasClicked,
  228.     379, 60, 41, 11, (UBYTE *)"Dep", NULL, GD_Depth, PLACETEXT_LEFT, NULL, (APTR)DepthClicked,
  229.     525, 15, 99, 11, (UBYTE *)"Zoom", NULL, GD_Zoom, PLACETEXT_LEFT, NULL, (APTR)ZoomClicked,
  230.     525, 30, 99, 11, (UBYTE *)"Palette", NULL, GD_Palette, PLACETEXT_LEFT, NULL, (APTR)PaletteClicked,
  231.     525, 45, 99, 11, (UBYTE *)"Mode", NULL, GD_OpenMode, PLACETEXT_LEFT, NULL, (APTR)OpenModeClicked,
  232.     596, 60, 26, 11, (UBYTE *)"Help", NULL, GD_Help, PLACETEXT_LEFT, NULL, (APTR)HelpClicked,
  233.     525, 60, 26, 11, (UBYTE *)"Prefs", NULL, GD_KeepPrefs, PLACETEXT_LEFT, NULL, (APTR)KeepPrefsClicked,
  234.     413, 143, 26, 11, (UBYTE *)"Project", NULL, GD_Project, PLACETEXT_LEFT, NULL, (APTR)ProjectClicked,
  235.     505, 143, 26, 11, (UBYTE *)"Prefs", NULL, GD_Prefs, PLACETEXT_LEFT, NULL, (APTR)PrefsClicked,
  236.     597, 143, 26, 11, (UBYTE *)"Render", NULL, GD_Render, PLACETEXT_LEFT, NULL, (APTR)RenderClicked,
  237.     6, 163, 89, 12, (UBYTE *)"Save", NULL, GD_Save, PLACETEXT_IN, NULL, (APTR)SaveClicked,
  238.     287, 163, 89, 12, (UBYTE *)"Use", NULL, GD_Use, PLACETEXT_IN, NULL, (APTR)UseClicked,
  239.     539, 163, 89, 12, (UBYTE *)"Cancel", NULL, GD_Cancel, PLACETEXT_IN, NULL, (APTR)CancelClicked,
  240.     10, 17, 207, 43, (UBYTE *)"Custom Screen", NULL, GD_CustomMode, PLACETEXT_ABOVE, NULL, (APTR)CustomModeClicked,
  241.     74, 94, 250, 12, (UBYTE *)"Preview", NULL, GD_Preview, PLACETEXT_LEFT, NULL, (APTR)PreviewClicked,
  242.     74, 110, 250, 12, (UBYTE *)"Load", NULL, GD_Load, PLACETEXT_LEFT, NULL, (APTR)LoadClicked,
  243.     74, 126, 250, 12, (UBYTE *)"Pre", NULL, GD_Pre, PLACETEXT_LEFT, NULL, (APTR)PreClicked,
  244.     74, 142, 250, 12, (UBYTE *)"Post", NULL, GD_Post, PLACETEXT_LEFT, NULL, (APTR)PostClicked,
  245.     413, 94, 211, 12, (UBYTE *)"TSMorph", NULL, GD_MorphScreen, PLACETEXT_LEFT, NULL, (APTR)MorphScreenClicked,
  246.     413, 110, 211, 12, (UBYTE *)"Render", NULL, GD_RenderScreen, PLACETEXT_LEFT, NULL, (APTR)RenderScreenClicked,
  247.     318, 60, 26, 11, (UBYTE *)"Int", NULL, GD_Integer, PLACETEXT_LEFT, NULL, (APTR)IntegerClicked
  248. };
  249.  
  250. ULONG TSMorphPrefsGTags[] = {
  251.     (GTSL_Min), 1, (GTSL_Max), 8, (GTSL_Level), 4, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  252.     (GTSL_Max), 32, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%2ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  253.     (GTSL_Max), 32, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%2ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  254.     (GTCY_Labels), (ULONG)&Mode0Labels[ 0 ], (TAG_DONE),
  255.     (GTCY_Labels), (ULONG)&SaveFormat0Labels[ 0 ], (TAG_DONE),
  256.     (GTSL_Max), 100, (GTSL_Level), 75, (GTSL_MaxLevelLen), 4, (GTSL_LevelFormat), (ULONG)"%3ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (GA_Disabled), TRUE, (TAG_DONE),
  257.     (TAG_DONE),
  258.     (GTSL_Max), 20, (GTSL_MaxLevelLen), 3, (GTSL_LevelFormat), (ULONG)"%2ld", (GTSL_LevelPlace), (PLACETEXT_RIGHT), (PGA_Freedom), LORIENT_HORIZ, (GA_RelVerify), TRUE, (TAG_DONE),
  259.     (GTCY_Labels), (ULONG)&Zoom0Labels[ 0 ], (TAG_DONE),
  260.     (GTCY_Labels), (ULONG)&Palette0Labels[ 0 ], (TAG_DONE),
  261.     (GTCY_Labels), (ULONG)&OpenMode0Labels[ 0 ], (TAG_DONE),
  262.     (TAG_DONE),
  263.     (TAG_DONE),
  264.     (TAG_DONE),
  265.     (TAG_DONE),
  266.     (TAG_DONE),
  267.     (TAG_DONE),
  268.     (TAG_DONE),
  269.     (TAG_DONE),
  270.     (GTLV_ShowSelected), NULL, (GTLV_ScrollWidth),14,(TAG_DONE),
  271.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  272.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  273.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  274.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  275.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  276.     (GTST_MaxChars), 127, (STRINGA_ExitHelp), TRUE, (TAG_DONE),
  277.     (TAG_DONE)
  278. };
  279.  
  280. // Font sizing stuff has been edited to work a bit better
  281. // Window does (just!) fit on 640x200 screen in topaz 80
  282. static UWORD ComputeX( UWORD value )
  283. {
  284.     return(( UWORD )((( FontX * value ) + 4 ) / max(FontX,6) ));
  285. }
  286.  
  287. static UWORD ComputeY( UWORD value )
  288. {
  289.     return(( UWORD )((( FontY * value ) + 4 ) / 8 ));
  290. }
  291.  
  292. static void ComputeFont( UWORD width, UWORD height )
  293. {
  294.     Font = &Attr;
  295.     Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
  296.     Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
  297.     FontX = Scr->RastPort.Font->tf_XSize;
  298.  
  299.     OffX = Scr->WBorLeft;
  300.     OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;
  301.  
  302.     if ( width && height ) {
  303.         if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
  304.             goto UseTopaz;
  305.         if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
  306.             goto UseTopaz;
  307.     }
  308.     return;
  309.  
  310. UseTopaz:
  311.     Font->ta_Name = (STRPTR)"topaz.font";
  312.     FontX = FontY = Font->ta_YSize = 8;
  313. }
  314.  
  315. int SetupScreen( void )
  316. {
  317.     if ( ! ( Scr = LockPubScreen( PubScreenName )))
  318.         return( 1L );
  319.  
  320.     ComputeFont( 0, 0 );
  321.  
  322.     if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
  323.         return( 2L );
  324.  
  325.     return( 0L );
  326. }
  327.  
  328. void CloseDownScreen( void )
  329. {
  330.     if ( VisualInfo ) {
  331.         FreeVisualInfo( VisualInfo );
  332.         VisualInfo = NULL;
  333.     }
  334.  
  335.     if ( Scr        ) {
  336.         UnlockPubScreen( NULL, Scr );
  337.         Scr = NULL;
  338.     }
  339. }
  340.  
  341. void TSMorphPrefsRender( void )
  342. {
  343.     struct IntuiText    it;
  344.     UWORD            cnt;
  345.  
  346.     ComputeFont( TSMorphPrefsWidth, TSMorphPrefsHeight );
  347.  
  348.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 335 ),
  349.                     OffY + ComputeY( 128 ),
  350.                     ComputeX( 293 ),
  351.                     ComputeY( 30 ),
  352.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  353.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 5 ),
  354.                     OffY + ComputeY( 3 ),
  355.                     ComputeX( 218 ),
  356.                     ComputeY( 72 ),
  357.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  358.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 455 ),
  359.                     OffY + ComputeY( 3 ),
  360.                     ComputeX( 173 ),
  361.                     ComputeY( 72 ),
  362.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  363.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 335 ),
  364.                     OffY + ComputeY( 79 ),
  365.                     ComputeX( 293 ),
  366.                     ComputeY( 47 ),
  367.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  368.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 227 ),
  369.                     OffY + ComputeY( 3 ),
  370.                     ComputeX( 223 ),
  371.                     ComputeY( 72 ),
  372.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  373.     DrawBevelBox( TSMorphPrefsWnd->RPort, OffX + ComputeX( 5 ),
  374.                     OffY + ComputeY( 79 ),
  375.                     ComputeX( 325 ),
  376.                     ComputeY( 79 ),
  377.                     GT_VisualInfo, VisualInfo, TAG_DONE );
  378.  
  379.     for ( cnt = 0; cnt < TSMorphPrefs_TNUM; cnt++ ) {
  380.         CopyMem(( char * )&TSMorphPrefsIText[ cnt ], ( char * )&it, (long)sizeof( struct IntuiText ));
  381.         it.ITextFont = Font;
  382.         it.LeftEdge  = OffX + ComputeX( it.LeftEdge ) - ( IntuiTextLength( &it ) >> 1 );
  383.         it.TopEdge   = OffY + ComputeY( it.TopEdge ) - ( Font->ta_YSize >> 1 );
  384.         PrintIText( TSMorphPrefsWnd->RPort, &it, 0, 0 );
  385.     }
  386. }
  387. typedef int (FPTR(void));
  388. int HandleTSMorphPrefsIDCMP( void )
  389. {
  390.     struct IntuiMessage    *m;
  391.     struct MenuItem        *n;
  392.     int            (*func)(void);
  393.     BOOL            running = TRUE;
  394.  
  395.     while( m = GT_GetIMsg( TSMorphPrefsWnd->UserPort )) {
  396.  
  397.         CopyMem(( char * )m, ( char * )&TSMorphPrefsMsg, (long)sizeof( struct IntuiMessage ));
  398.  
  399.         GT_ReplyIMsg( m );
  400.  
  401.         switch ( TSMorphPrefsMsg.Class ) {
  402.  
  403.             case    IDCMP_REFRESHWINDOW:
  404.                 GT_BeginRefresh( TSMorphPrefsWnd );
  405.                 TSMorphPrefsRender();
  406.                 GT_EndRefresh( TSMorphPrefsWnd, TRUE );
  407.                 break;
  408.  
  409.             case    IDCMP_CLOSEWINDOW:
  410.                 running = TSMorphPrefsCloseWindow();
  411.                 break;
  412.  
  413.             case    IDCMP_MENUHELP:
  414.                 running = TSMorphPrefsMenuHelp();
  415.                 break;
  416.  
  417.             case    IDCMP_GADGETUP:
  418.             case    IDCMP_GADGETDOWN:
  419.                 func = (FPTR *)(( struct Gadget * )TSMorphPrefsMsg.IAddress )->UserData;
  420.                 running = func();
  421.                 break;
  422.  
  423.             case    IDCMP_MENUPICK:
  424.                 while( TSMorphPrefsMsg.Code != MENUNULL ) {
  425.                     n = ItemAddress( TSMorphPrefsMenus, TSMorphPrefsMsg.Code );
  426.                     func = (FPTR *)(GTMENUITEM_USERDATA( n ));
  427.                     running = func();
  428.                     TSMorphPrefsMsg.Code = n->NextSelect;
  429.                 }
  430.                 break;
  431.  
  432.             case    IDCMP_RAWKEY:
  433.                 running = TSMorphPrefsRawKey();
  434.                 break;
  435.  
  436.              default:
  437.                 break;
  438.         }
  439.     }
  440.     return( (int) running );
  441. }
  442.  
  443. int OpenTSMorphPrefsWindow( void )
  444. {
  445.     struct NewGadget    ng;
  446.     struct Gadget    *g;
  447.     UWORD        lc, tc;
  448.     UWORD        wleft = TSMorphPrefsLeft, wtop = TSMorphPrefsTop, ww, wh;
  449.  
  450.     ComputeFont( TSMorphPrefsWidth, TSMorphPrefsHeight );
  451.  
  452.     ww = ComputeX( TSMorphPrefsWidth );
  453.     wh = ComputeY( TSMorphPrefsHeight );
  454.  
  455.     if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
  456.     if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;
  457.  
  458.     if ( ! ( g = CreateContext( &TSMorphPrefsGList )))
  459.         return( 1L );
  460.  
  461.     for( lc = 0, tc = 0; lc < TSMorphPrefs_CNT; lc++ ) {
  462.  
  463.         CopyMem((char * )&TSMorphPrefsNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));
  464.  
  465.         ng.ng_VisualInfo = VisualInfo;
  466.         ng.ng_TextAttr   = Font;
  467.         ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
  468.         ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
  469.         ng.ng_Width      = ComputeX( ng.ng_Width );
  470.         ng.ng_Height     = ComputeY( ng.ng_Height);
  471.  
  472. // store size of gadget
  473.         Rect[lc].MinX = ng.ng_LeftEdge;
  474.         Rect[lc].MinY = ng.ng_TopEdge;
  475.         Rect[lc].MaxX = ng.ng_LeftEdge + ng.ng_Width;
  476.         Rect[lc].MaxY = ng.ng_TopEdge + ng.ng_Height;
  477.  
  478.         TSMorphPrefsGadgets[ lc ] = g = CreateGadgetA((ULONG)TSMorphPrefsGTypes[ lc ], g, &ng, ( struct TagItem * )&TSMorphPrefsGTags[ tc ] );
  479.  
  480.         while( TSMorphPrefsGTags[ tc ] ) tc += 2;
  481.         tc++;
  482.  
  483.         if ( NOT g )
  484.             return( 2L );
  485.     }
  486.  
  487.     if ( ! ( TSMorphPrefsMenus = CreateMenus( TSMorphPrefsNewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
  488.         return( 3L );
  489.  
  490.     LayoutMenus( TSMorphPrefsMenus, VisualInfo, GTMN_NewLookMenus,TRUE,TAG_DONE );
  491.  
  492.         TSMorphPrefsZoom[0] = TSMorphPrefsZoom[1] = 0;
  493.     if ( TSMorphPrefsWdt )
  494.         TSMorphPrefsZoom[2] = TextLength( &Scr->RastPort, (UBYTE *)TSMorphPrefsWdt, strlen((char *)TSMorphPrefsWdt )) + 80;
  495.     else
  496.         TSMorphPrefsZoom[2]  = 80L;
  497.         TSMorphPrefsZoom[3] = Scr->WBorTop + Scr->RastPort.TxHeight + 1;
  498.  
  499.     if ( ! ( TSMorphPrefsWnd = OpenWindowTags( NULL,
  500.                 WA_Left,    wleft,
  501.                 WA_Top,        wtop,
  502.                 WA_Width,    ww + OffX + Scr->WBorRight,
  503.                 WA_Height,    wh + OffY + Scr->WBorBottom,
  504.                 WA_IDCMP,    SLIDERIDCMP|CYCLEIDCMP|CHECKBOXIDCMP|BUTTONIDCMP|LISTVIEWIDCMP|STRINGIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW|
  505.                                 IDCMP_RAWKEY|IDCMP_MENUHELP,
  506.                 WA_Flags,    WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
  507.                 WA_Gadgets,    TSMorphPrefsGList,
  508.                 WA_Title,    TSMorphPrefsWdt,
  509.                 WA_ScreenTitle,    "TSMorph ©1993/94 Topicsave Limited",
  510.                 WA_PubScreen,    Scr,
  511.                 WA_Zoom,    TSMorphPrefsZoom,
  512.                 WA_NewLookMenus, TRUE,
  513.                 WA_Activate,TRUE,
  514.                 WA_MenuHelp, TRUE,
  515.                 WA_AutoAdjust,TRUE,
  516.                 TAG_DONE )))
  517.     return( 4L );
  518.  
  519.     SetMenuStrip( TSMorphPrefsWnd, TSMorphPrefsMenus );
  520.     GT_RefreshWindow( TSMorphPrefsWnd, NULL );
  521.  
  522.     TSMorphPrefsRender();
  523.  
  524.     return( 0L );
  525. }
  526.  
  527. void CloseTSMorphPrefsWindow( void )
  528. {
  529.     if ( TSMorphPrefsMenus      ) {
  530.         ClearMenuStrip( TSMorphPrefsWnd );
  531.         FreeMenus( TSMorphPrefsMenus );
  532.         TSMorphPrefsMenus = NULL;    }
  533.  
  534.     if ( TSMorphPrefsWnd        ) {
  535.         CloseWindow( TSMorphPrefsWnd );
  536.         TSMorphPrefsWnd = NULL;
  537.     }
  538.  
  539.     if ( TSMorphPrefsGList      ) {
  540.         FreeGadgets( TSMorphPrefsGList );
  541.         TSMorphPrefsGList = NULL;
  542.     }
  543. }
  544.  
  545.